//
//  CZEmoticonCell.swift
//  微博表情键盘
//
//  Created by Summer on 2017/12/24.
//  Copyright © 2017年 Summer. All rights reserved.
//

import UIKit

@objc protocol CZEmoticonCellDelegate {
    /// 表情 cell 选中模型按钮
    ///
    /// - Parameter em: 表情模型/nil 删除按钮
    @objc optional func emoticonSelected(em: CZEmoticon?);
}

/// 表情的页面 cell
// - 每一个 cell 就是和 collectionView 一样大小
// - 每一个 cell 中使用九宫格的算法，自行添加20个表情
// - 最后一个放删除按钮
class CZEmoticonCell: UICollectionViewCell {

    // 代理不能为 let ，因为代理有可能为nil
    weak var delegate: CZEmoticonCellDelegate?
    
    @IBOutlet weak var label: UILabel!
    
    // 当前页面的表情模型数组
    var emoticons: [CZEmoticon]? {
        didSet{
            
            for v in contentView.subviews {
                v.isHidden = true
            }
            
            // 显示删除按钮
            contentView.subviews.last?.isHidden = false
            
            for (i, em) in (emoticons ?? []).enumerated() {
                
                // 根据i取出按钮
                if let btn = contentView.subviews[i] as? UIButton {
                    // 设置表情图像，如果图像为nil，会清空图像，避免cell复用
                    btn.setImage(em.image, for: [])
                    
                    // 设置 emoji 表情字符串，如果title为nil，会清空title，避免cell复用
                    btn.setTitle(em.emoji, for: [])
                    
                    btn.isHidden = false
                }
                
            }
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setupUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: 监听方法
    @objc private func emoticonClick(btn: UIButton) {
        
        let tag = btn.tag
        
        var em: CZEmoticon?
        if tag < (emoticons?.count)! {
            em = emoticons?[tag]
        }
        delegate?.emoticonSelected?(em: em)
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        
        setupUI()
        
    }

}

extension CZEmoticonCell {
    
    // - 从 xib 加载，bounds 是 xib 中设置的大小，不是 size 的大小
    // - 从纯代码创建，bounds 是 布局属性中的 itemSize
    func setupUI() {
        // 连续创建21个按钮
        let rowCount = 3
        let colCount = 7
        for i in 0..<rowCount * colCount {
            let row = i / colCount
            let col = i % colCount
            
            let leftMargin: CGFloat = 8
            let bottomMargin: CGFloat = 16
            
            let w = (bounds.width - 2 * leftMargin) / CGFloat(colCount)
            let h = (bounds.height - bottomMargin) / CGFloat(rowCount)
            let x = leftMargin + CGFloat(col) * w
            let y = CGFloat(row) * h
            
            let btn = UIButton()
            btn.frame = CGRect(x: x, y: y, width: w, height: h)
            contentView.addSubview(btn)
            // 设置按钮字体大小，lineHeight 基本上和图片的大小差不多
            // 基本上图片有多高，字体设置多大即可
            btn.titleLabel?.font = UIFont.systemFont(ofSize: 32)
            btn.tag = i
            btn.addTarget(self, action: #selector(emoticonClick), for: .touchUpInside)
        }
        
        // 删除按钮
        let btn = contentView.subviews.last as! UIButton
        
        let image = UIImage(named: "compose_emotion_delete", in: CZEmoticonManager.shared.bundle, compatibleWith: nil)
        let imageHL = UIImage(named: "compose_emotion_delete_highlighted", in: CZEmoticonManager.shared.bundle, compatibleWith: nil)
        btn.setImage(image, for: [])
        btn.setImage(imageHL, for: .highlighted)
    }
    
}
